10814. Упрощение дробей
Написать программу, которая
сокращает заданную дробь.
Вход.
Первая строка содержит количество тестов n (n £ 20). Каждая из следующих n
строк содержит дробь в виде p / q (1 £ p, q £ 1030).
Выход. Для каждого теста вывести дробь после сокращения.
4
1 / 2
2 / 4
3 / 3
4 / 2
1 / 2
1 / 2
1 / 1
2 / 1
длинная арифметика
Поскольку входные числа не более 1030,
то следует использовать класс длинной арифметики BigInteger. Для сокращения дроби p
/ q следует найти d = НОД(p, q)
и разделить
числитель и знаменатель дроби на d.
Для вычисления наибольшего общего делителя двух длинных чисел
функция GCD использует константу 0, занесенную в
переменную Zero.
BigInteger Zero(0);
BigInteger GCD(BigInteger a, BigInteger b)
{
if
(b > Zero) return GCD(b,a.mod(b));
return a;
}
Читаем количество тестов tests.
Заносим числитель и знаменатель дроби в переменные p и q типа BigInteger.
scanf("%d",&tests);
for(i=0;i<tests;i++)
{
scanf("%s",s);
p = BigInteger(string(s));
scanf("%s",s);
scanf("%s",s); q = BigInteger(string(s));
d = GCD(p,q);
p = p / d; q = q / d;
p.print();printf(" / "); q.print();printf("\n");
}